package teste;

import java.io.File;

import br.unisul.redeNeural.Configuracao;
import br.unisul.redeNeural.ParTreino;
import br.unisul.redeNeural.Perceptron;
import br.unisul.redeNeural.RedeNeural;
import br.unisul.redeNeural.RedeNeuralException;
import br.unisul.util.Ferramentas;
import br.unisul.util.LeituraArquivo;

public class TesteLetrasPerceptron {

	public static void main(String[] args) {
		Configuracao configuracao = new Configuracao(63, 7);
		configuracao.setSuportaVies(true);
		configuracao.setTaxaAprendizado(1.0);

		ParTreino p = new ParTreino(configuracao);
		inicialiazar(p);

		RedeNeural n = new Perceptron(configuracao);
		try {
			n.treinar(p);
		} catch (RedeNeuralException e1) {
			e1.printStackTrace();
		}


		try {
			Ferramentas.salvarParTreino(p, new File("teste.par"));
			Ferramentas.salvarRedeNeural(n, new File("teste.rna"));
		} catch (Exception e1) {
			e1.printStackTrace();
		}

		try {
			System.out.println(Ferramentas.verificarSaida(n.verificarSaidas(p.getEntradas()), p.getSaidas()));
		} catch (RedeNeuralException e) {
			e.printStackTrace();
		}
		LeituraArquivo leituraArquivo = new LeituraArquivo(new File(
				"arquivos\\file21.txt"));
		try {
			System.out.println(verificarRelatorio(n
					.verificarSaidas(leituraArquivo.toArray(9, 7))));
		} catch (RedeNeuralException e) {
			e.printStackTrace();
		}
		
		
	}

	public static void inicialiazar(ParTreino p) {
		double s[][] = new double[21][63];

		String arquivo = "arquivos\\file";
		String extensao = ".txt";
		LeituraArquivo leitura = new LeituraArquivo();
		int entrada = 0;
		for (int i = 0; i < s.length; i++) {
			String local = (entrada + i < 10) ? arquivo + "0" + (entrada + i)
					+ extensao : arquivo + (entrada + i) + extensao;
			leitura.setFile(new File(local));
			s[i] = leitura.toArray(9, 7);
		}
		double[][] t = new double[7][7];
		for (int i = 0; i < t.length; i++) {
			for (int j = 0; j < t[i].length; j++) {
				t[i][j] = -1;
			}
			t[i][i] = 1;
		}
		for (int i = 0; i < s.length; i++) {
			p.adicionaPar(s[i], t[i % 7]);
		}
	}

	public static String verificarRelatorio(double[] vetor) {
		String z = "";
		String caracteres = "abcdejk";
		for (int i = 0; i < vetor.length; i++) {
			if (vetor[i] == 1) {
				z += caracteres.charAt(i);
			}
		}
		String relatorio = "A rede reconheceu tais letra(s): "
			+ ((z.length() <= 0) ? "Nenhuma reconhecida" : z);
		return relatorio;
	}

}
